//
// Created by ZYZ on 2020/6/17.
//

#include <stdio.h>
#include "stack_use6_hanoi.h"

int move_count = 0;

void move(char from, int num, char to) {
    ++move_count;
    printf("将编号为 %d 的圆盘从 %c 移到 %c , 第 %d 次移动 \n", num, from, to, move_count);
}

// 将塔座 x 上按直径由小到大且自上而下编号为 1 至 n 的 n 个圆盘按规则搬到塔座 z 上，y 用作辅助塔座
void hanoi(int n, char x, char y, char z) {
    // 搬动操作 move (x, n, z）可定义为（c 是初值为 0 的全局变量，对搬动计数）
    // printf ("%i, Move disk %i from %c to %c \n", ++c, n, x, z);

    if (n == 1)
        move(x, 1, z);                //将编号为 1 的圆盘从 x 移到 z
    else {
        hanoi(n - 1, x, z, y);          //将 x 上编号为 1 至 n - 1 的圆盘移到 y, z 作辅助塔
        move(x, n, z);                     //将编号为 n 的圆盘从 x 移到 z
        hanoi(n - 1, y, x, z);          //将 y 上编号为 1 至 n - 1 的圆盘移到 z, x 作辅助塔
    }
}